package com.设计模式;
/*
     策略模式定义了一系列算法，并将每个算法封装起来，使他们可以相互替换，且算法的变化不会影响到使用算法
    的客户。需要设计一个接口，为一系列实现类提供统一的方法，多个实现类实现该接口，设计一个抽象类（可有可无，
    属于辅助类），提供辅助函数。策略模式的决定权在用户，系统本身提供不同算法的实现，新增或者删除算法，对各种
    算法做封装。因此，策略模式多用在算法决策系统中，外部用户只需要决定用哪个算法即可。
* */
public class 策略模式
{
    public static void main(String[] args)
    {
        String exp = "2+8";
        ICalculator plus = new Plus();
        System.out.println(plus.calculate(exp));
    }
}
interface ICalculator{
    int calculate(String exp);
}

class Minus extends AbstractCaculator implements ICalculator{

    @Override
    public int calculate(String exp)
    {
        int[] split = split(exp, "-");
        return split[0] - split[1];
    }
}

class Plus extends AbstractCaculator implements ICalculator{

    @Override
    public int calculate(String exp)
    {
        int[] split = split(exp, "\\+");
        return split[0] + split[1];
    }
}
class AbstractCaculator{
    public int[] split(String exp,String opt){
        String[] split = exp.split(opt);
        int arr[] = new int[2];
        arr[0] = Integer.parseInt(split[0]);
        arr[1] = Integer.parseInt(split[1]);
        return arr;

    }
}
